//守护进程
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<signal.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
void my_daemon(int nochdir,int noclose)
{
  umask(0);
  //printf("I am process!!");
 if(fork()>0)
 {
   //father
   exit(0);
 }

 signal(SIGCHLD,SIG_IGN);
 setsid();

 //不是必须的，防御性编程
 if(fork()>0)
 {
  // father
   exit(0);
 }
//孙子进程
if(nochdir==0)
  chdir("/");//可选的选项

if(noclose==0)
{
  close(0);//关闭输入
  int fd=open("/dev/null",O_RDWR);
  dup2(fd,1);
  dup2(fd,2);//重定向输出
}

}

int main()
{
//my_daemon(0,0);
daemon(0,0);
while(1)
{
  sleep(1);
}
  return 0;
}
